package func.study.designpattern.singleton;

/**
 * 原始单例模式
 * 2种都有问题，建议使用 ResourceFactory 使用holder模式延迟初始化，来实现单例模式
 *
 * Created by chenyao on 2017/7/13.
 */
public class SingletonInstance {
    private static Resource resource;

    /**
     * 1.第一种
     * 问题：线程不安全
     * @return
     */
    public static Resource getInstance1() {
        if(resource == null) {
            resource = new Resource();
        }
        return resource;
    }
    /**
     * 2.使用双检查锁实现。（不建议使用）
     * 问题：线程可能看到一个部分创建的Resource
     *
     * @return
     */
    public static Resource getInstance2() {
        if(resource == null) {
            synchronized (SingletonInstance.class) {
                if(resource == null) {
                    resource = new Resource();
                }
            }
        }
        return resource;
    }

    /**
     * 线程安全，但性能低
     * @return
     */
    public static Resource getInstance3() {
        synchronized (SingletonInstance.class) {
            if(resource == null) {
                resource = new Resource();
            }
        }
        return resource;
    }





}
